package com.lin.knife4j.order.config;

import com.lin.knife4j.SwaggerConfigFactory;
import com.lin.knife4j.SwaggerProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

@Configuration
@EnableSwagger2WebMvc
@EnableConfigurationProperties(SwaggerProperties.class)
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfiguration {
    @Autowired
    SwaggerProperties properties;

    @Bean
    public Docket swaggerConfig() {
        SwaggerConfigFactory factory = new SwaggerConfigFactory(properties);
        return factory.groupRestApi();
    }

//    @Value("${spring.application.name}")
//    private String groupName;
//
//    @Bean(value = "order-api")
//    @Order(value = 1)
//    public Docket groupRestApi() {
//        Docket docket = new Docket(DocumentationType.SWAGGER_2)
////                .pathMapping("order") // 为映射路径添加同一前缀，可以由servlet自己生成
//                .apiInfo(groupApiInfo())
//                .groupName(groupName)
//                .select()
//                .apis(RequestHandlerSelectors.basePackage("com.lin.knife4j.order.controller"))
//                .paths(PathSelectors.any())
//                .build();
////                .securityContexts(CollectionUtils.newArrayList(securityContext(), securityContext1()))
////                .securitySchemes(CollectionUtils.<SecurityScheme>newArrayList(apiKey(), apiKey1()))
//        return docket;
//    }
//
//    private ApiInfo groupApiInfo() {
//        return new ApiInfoBuilder()
//                .title("订单服务")
//                .description("<div style='font-size:14px;color:red;'>swagger-bootstrap-ui-demo RESTful APIs</div>")
//                .termsOfServiceUrl("http://localhost:8000/")
//                .contact("linjiang@qq.com")
//                .version("1.0")
//                .build();
//    }
//
//
//    private ApiKey apiKey() {
//        return new ApiKey("BearerToken", "Authorization", "header");
//    }
//
//    private ApiKey apiKey1() {
//        return new ApiKey("BearerToken1", "Authorization-x", "header");
//    }
//
//    private SecurityContext securityContext() {
//        return SecurityContext.builder()
//                .securityReferences(defaultAuth())
//                .forPaths(PathSelectors.regex("/.*"))
//                .build();
//    }
//
//    private SecurityContext securityContext1() {
//        return SecurityContext.builder()
//                .securityReferences(defaultAuth1())
//                .forPaths(PathSelectors.regex("/.*"))
//                .build();
//    }
//
//    List<SecurityReference> defaultAuth() {
//        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
//        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
//        authorizationScopes[0] = authorizationScope;
//        return CollectionUtils.newArrayList(new SecurityReference("BearerToken", authorizationScopes));
//    }
//
//    List<SecurityReference> defaultAuth1() {
//        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
//        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
//        authorizationScopes[0] = authorizationScope;
//        return CollectionUtils.newArrayList(new SecurityReference("BearerToken1", authorizationScopes));
//    }

}